1. Field of the Invention
The present invention generally relates to shared storage and more particularly to a hybrid virtualization engine which provides a system that has the advantages of both in-band and out-of-band virtualization engines without the disadvantages of either.
2. Description of the Related Art
Until recently, shared storage has only been implemented well within homogeneous aggregations of computer systems, IBM System 390 (IBM Corporation, Armonk, N.Y., USA) is one example where different computers have been able to share storage, this sharing is enabled by the existence of a single architecture that fits together the sharing mechanisms and storage management mechanisms.
With the advent of open systems and especially since the advent of storage area networks (SAN), no single system vendor has been able to define such an architecture or storage management system under which all logical block storage can be deployed and managed. Instead, a set of different vendors have produced different products according to different standards and application program interfaces (APIs). The result of this is that while a large range of hardware products can be physically attached on a SAN fabric, they generally do not interoperate well and they also generally present different interfaces to storage administrators and storage administration tools, making the management of the set of connected logical block devices extremely difficult.
A class of SAN products termed ‘virtualization engines’ have started to appear. The purpose of this class of product is to significantly simplify the management of logical block storage in the following ways. A virtualization engine places a mapping function in the path in which read and write data requests are made by computer systems. The purpose of the mapping function is to determine which physical storage locations hold the data requested by the computer system, to intercept write data requests and perform special actions when the physical storage locations are sources for advanced functions such as point-in-time or remote copies. To be effective, this mapping function should add only small latency to the fulfillment of the data request, and scale well. Since a SAN attaches many computer systems (possibly from several vendors) with many storage devices (also possibly from several vendors), the mapping function must provide a consistent picture to all computer systems of which physical storage locations are associated with which logical blocks that are being accessed by those computer systems. To date, two virtualization engine architectures have emerged, ‘in-band’ and ‘out-of-band’. Out-of-band virtualization engines have two separate functions which coordinate together to provide virtualization.
The first function is the mapping function, which maps host requests to physical locations on a storage device. There are generally many instances of the mapping function within the SAN. These instances are typically located in a computer system either in a device driver or host bus adapter, or in a SAN switch such as a fibrechannel switch. The mapping function is meant to operate with very low overhead, for example in a fibrechannel switch is meant to operate at the maximum rated speed of the switch.
The second function is the management function, which handles the interface to the system administrator or system administration tool. One responsibility of the management function is to respond to configuration requests by updating the master copy of the configuration and also coordinating the altering of the tables in the various instances of the mapping function to reflect new configuration. Another responsibility is to be responsive to signals from the mapping function instances indicating that data access requests require special handling, and to coordinate the actions for carrying out the special handling. There is generally only one management function in the system albeit with a backup instance of it to provide fault tolerance for the function.
In-band virtualization engines combine the two functions such that read and write data requests are serviced at the same place that configuration requests are serviced. In addition, they often have more advanced functions such as fast-write caching and more robust and performance oriented implementations of remote copy and point-in-time copy.